package com.demo.listener;


import com.demo.event.MyUserEvent;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * 通过注解的方式进行订阅监听
 * 需要注意的是通过@EventListener订阅的监听是在bean实例化完的时候才会添加到ApplicationContext的事件发布器中
 * 具体时机查看springboot内嵌初始化#2.7.11.5.2（https://www.processon.com/view/link/5d63a33ee4b04e664f325277）
 */
@Component
public class AnnotationListener {

    //做异步事件通知
    @Async
    @EventListener(MyUserEvent.class)
    public void testEventMethod(MyUserEvent e){
        try {
            Thread.currentThread().sleep(1000);
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }

        System.out.println("AnnotationListener监听MyUserEvent事件，username="+e.getUser().getName());
    }
}
